/*空类型，表示无赋值*/
type IEmptyFunction = () => void;

/*任意类型，是所有类型的子类型*/
type IAnyType = any;

/*枚举类型：支持枚举值到枚举名的正、反向映射*/
enum EnumExample {
    add = '+',
    mult = '*'
}

EnumExample['add'] === '+';
EnumExample['+'] === 'add';

enum ECorlor {
    Mon, Tue, Wed, Thu, Fri, Sat, Sun
};
ECorlor['Mon'] === 0;
ECorlor[0] === 'Mon';

/*泛型*/
type INumArr = Array<number>;

//js实现
/*function getRepeatArr(target) {
    return new Array(100).fill(target);
}*/
type IGetRepeatArr = (target: any) => any[];
/*不预先指定具体的类型，而在使用的时候再指定类型的一种特性*/
type IGetRepeatArrR = <T>(target: T) => T[];

/*泛型接口 & 多泛型*/
interface IX<T, U> {
    key: T;
    val: U;
}

/*泛型类*/
class IMan<T> {
    instance: T;
}

/*泛型别名*/
type ITypeArr<T> = Array<T>;


/*泛型约束：限制泛型必须符合字符串*/
type IGetRepeatStringArr = <T extends string>(target: T) => T[];
const getStrArr: IGetRepeatStringArr = target => new Array(100).fill(target);
/*报错：类型“number”的参数不能赋给类型“string”的参数*/
// getStrArr(123);

/*泛型参数默认类型*/
type IGetRepeatArr2<T = number> = (target: T) => T[];
const getRepeatArr2:IGetRepeatArr2=target => new Array(100).fill(target);
/*报错：类型“string”的参数不能赋给类型“number”的参数*/
// getRepeatArr2('123')

